package com.example.pagination;

public class PagHelper {

	// 是否允许排序
	private boolean allowSorting = false;

	// 是否降序排列
	private boolean isDESC = true;

	// 是否为首页
	private boolean isFirstPage = true;

	// 是否为尾页
	private boolean isLastPage = false;

	// 页索引
	private int pageIndex = 1;

	// 总页数
	private int pagesCount = 0;

	// 页大小
	private int pageSize = 10;

	// 排除行数
	private int removeSize = 0;

	// 总记录数
	private int rowsCount = 0;

	// 记录总数是否为空
	private boolean rowsIsZero = false;

	// 排序字段
	private String sequenceField = null;

	public PagHelper() {
	}

	public PagHelper(int PageSize) {
		pageSize = PageSize;
	}

	public PagHelper(int PageSize, boolean AllowSorting) {
		pageSize = PageSize;
		allowSorting = AllowSorting;
	}

	/**
	 * 获取或设置是否允许排序。 初始化值为false.
	 */
	public boolean getAllowSorting() {
		return allowSorting;
	}

	/**
	 * 当前页记录的结束行数。
	 */
	public int getEndRow() {
		return pageIndex * (pageSize - 1);
	}

	/**
	 * 设置是否为降序排列。 初始化值为true.
	 */
	public boolean getIsDESC() {
		return isDESC;
	}

	/**
	 * 获得是否为首页。
	 */
	public boolean getIsFirstPage() {
		return isFirstPage;
	}

	/**
	 * 获得是否为尾页。
	 */
	public boolean getIsLastPage() {
		return isLastPage;
	}

	/**
	 * 获取或设置当前页索引。 初始化值为1.
	 */
	public int getPageIndex() {
		return pageIndex;
	}

	/**
	 * 获取总页数。
	 */
	public int getPagesCount() {
		return pagesCount;
	}

	/**
	 * 获取或设置每页要显示的行数。 初始化值为10.
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 获得被排除记录行数。
	 */
	public int getRemoveSize() {
		return removeSize;
	}

	/**
	 * 获取或设置记录总行数。
	 */
	public int getRowsCount() {
		return rowsCount;
	}

	public boolean getRowsIsZero() {
		return rowsIsZero;
	}

	/**
	 * 获取或设置排序字段
	 */
	public String getSequenceField() {
		return sequenceField;
	}

	/**
	 * 获取排序类型。
	 */
	public String getSort() {
		return isDESC ? "DESC" : "ASC";
	}

	/**
	 * 当前页记录的开始行数。
	 */
	public int getStartRow() {
		return removeSize;
	}

	public void setAllowSorting(boolean value) {
		allowSorting = value;
	}

	public void setIsDESC(boolean value) {
		isDESC = value;
	}

	public void setPageIndex(int value) {
		pageIndex = (value > 0) ? value : pageIndex;
	}

	public void setPageSize(int value) {
		pageSize = (value > 1) ? value : pageSize;
	}

	public void setRowsCount(int value) {
		// 设置记录总行数
		rowsCount = (value >= 0) ? value : rowsCount;
		if (rowsCount > 0) {
			// 设置总页数
			pagesCount = (rowsCount % pageSize == 0) ? rowsCount / pageSize
					: (rowsCount / pageSize) + 1;

			// 检查请求页是否正确,当请求页大于总页数时,请求页将被自动设为最大值。
			pageIndex = (pageIndex > pagesCount) ? pagesCount : pageIndex;

			// 设置被排除的记录数
			removeSize = (pageIndex - 1) * pageSize;

			// 设置请求页是否为首页.
			isFirstPage = (pageIndex == 1) ? true : false;

			// 设置请求页是否为尾页.
			isLastPage = (pageIndex == pagesCount) ? true : false;
		} else {
			rowsIsZero = true;
		}
	}

	public void setSequenceField(String value) {
		sequenceField = value;
	}

}
